package com.partvoyage.client.mvp2.view.infoGeneral;

import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.fields.DataSourceDateField;
import com.smartgwt.client.data.fields.DataSourceSequenceField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.calendar.Calendar;
import com.smartgwt.client.widgets.events.HasClickHandlers;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

public class InformationGeneralView extends VLayout implements
		InformationGeneralPresenter.Display {

	private Label coutGlobal;
	private Label dateDepart;
	private Label dateArrive;
	private DynamicForm commentaireForm = new DynamicForm();
	private DynamicForm nomProjetForm = new DynamicForm();
	private IButton validationNomProjet;
	private IButton validationCommentaire;
	private TextItem commentaireText;
	private HTMLFlow animationTitreFlow;
	private TextItem nomProjetText;
	private Calendar calendar;
	private DataSource eventDS;
	HLayout calendrierLayout = new HLayout();
	public InformationGeneralView() {
		super();
		this.setWidth100();
		this.setHeight100();
		this.setShowResizeBar(true);
		// ajout du titre
		this.addMember(new TitreHLayout());
		// saisi du nom du projet
		this.ajouterSaisiNomProjet();

		// ajout calendrier
		this.ajouterCalendrier();

		// ajout date départ
		// this.ajouterDateDepart();
		// // ajout date arrivé
		// this.ajouterDateArrive();
		// ajout du cout global
		this.ajouterCoutGlobal();
		// saisi du commentaire
		this.ajouterCommentaire();
	}

	@SuppressWarnings("deprecation")
	private void ajouterCalendrier() {
		
		calendrierLayout.setWidth100();
		calendrierLayout.setHeight("20%");
		calendrierLayout.setShowEdges(true);
		eventDS = new DataSource();
		DataSourceSequenceField eventIdField = new DataSourceSequenceField(
				"eventId");
		eventIdField.setPrimaryKey(true);

		DataSourceTextField nameField = new DataSourceTextField("name");
		DataSourceTextField descField = new DataSourceTextField("description");
		DataSourceTextField idInfoBeanField = new DataSourceTextField("markerId");
		DataSourceDateField startDateField = new DataSourceDateField(
				"startDate");
		DataSourceDateField endDateField = new DataSourceDateField("endDate");

		eventDS.setFields(eventIdField, nameField, descField, startDateField,
				endDateField,idInfoBeanField);
		eventDS.setClientOnly(true);
		
		calendar = new InformationGeneralCalendrier();
		calendar.setWidth100();
		calendar.setHeight100();
		calendar.setShowDayView(false);
		calendar.setShowWeekView(false);
		calendar.setShowOtherDays(false);
		calendar.setShowDayHeaders(false);
		calendar.setShowDatePickerButton(false);
		calendar.setShowAddEventButton(false);
		calendar.setDisableWeekends(false);
		calendar.setShowDateChooser(false);
		calendar.setCanCreateEvents(false);
		calendar.setDataSource(eventDS);
		calendar.setAutoFetchData(true);
		calendrierLayout.addMember(calendar);
		this.addMember(calendrierLayout);
	}
	
	public HLayout getCalendrierLayout() {
		return calendrierLayout;
	}

	private void ajouterSaisiNomProjet() {
		HLayout nomProjetLayout = new HLayout();
		nomProjetLayout.setWidth100();
		nomProjetLayout.setHeight("10%");
		nomProjetLayout.setDefaultLayoutAlign(Alignment.CENTER);

		nomProjetForm.setWidth("70%");
		// commentaireForm.setDataSource(CommentaireProjetDS.getInstance());
		nomProjetText = new TextItem("nomProjetTextItem", "Nom projet ");
		nomProjetText.setHeight("100%");
		nomProjetText.setAlign(Alignment.CENTER);
		nomProjetText.setHint("Entrer un nom de projet");
		nomProjetText.setShowHintInField(true);
		nomProjetForm.setFields(nomProjetText);
		validationNomProjet = new IButton();
		validationNomProjet.setWidth("40px");
		validationNomProjet.setAlign(Alignment.CENTER);
		validationNomProjet.setTitle("Ok");

		nomProjetLayout.addMember(nomProjetForm);
		nomProjetLayout.addMember(validationNomProjet);
		nomProjetLayout.setShowEdges(true);
		this.addMember(nomProjetLayout);
	}

	// private void ajouterDateDepart() {
	// HLayout dateDepartLayout = new HLayout();
	// dateDepartLayout.setWidth100();
	// dateDepartLayout.setHeight("10%");
	// dateDepartLayout.setShowEdges(true);
	// dateDepart = new Label();
	// dateDepart.setWidth100();
	// dateDepart.setHeight100();
	// dateDepart.setAlign(Alignment.CENTER);
	// dateDepart.setValign(VerticalAlignment.CENTER);
	// dateDepart.setWrap(false);
	// // TODO appel service pour calculer cout global
	// String mockDateDepart = "Date de départ : 12/12/2010";
	// dateDepart.setContents(mockDateDepart);
	// dateDepartLayout.addMember(dateDepart);
	// this.addMember(dateDepartLayout);
	//
	// }
	//
	// private void ajouterDateArrive() {
	// dateArrive = new Label();
	// dateArrive.setWidth100();
	// dateArrive.setHeight("10%");
	// dateArrive.setAlign(Alignment.CENTER);
	// dateArrive.setValign(VerticalAlignment.CENTER);
	// dateArrive.setWrap(false);
	// // TODO appel service pour calculer cout global
	// String mockDateArrive = "Date d'arrivé : 01/03/2011";
	// dateArrive.setContents(mockDateArrive);
	// dateArrive.setShowEdges(true);
	// this.addMember(dateArrive);
	// }

	private void ajouterCoutGlobal() {
		coutGlobal = new Label();
		coutGlobal.setWidth100();
		coutGlobal.setHeight("10%");
		coutGlobal.setAlign(Alignment.CENTER);
		coutGlobal.setValign(VerticalAlignment.CENTER);
		coutGlobal.setWrap(false);
		coutGlobal.setIcon("/images/argent.png");
		coutGlobal.setShowEdges(true);
		this.addMember(coutGlobal);

	}

	private void ajouterCommentaire() {
		HLayout commentaireLayout = new HLayout();
		commentaireLayout.setWidth100();
		commentaireLayout.setHeight("10%");
		commentaireLayout.setDefaultLayoutAlign(Alignment.CENTER);

		commentaireForm.setWidth("70%");
		// commentaireForm.setDataSource(CommentaireProjetDS.getInstance());
		commentaireText = new TextItem("commentaireTextItem", "Commentaire ");
		commentaireText.setHeight("100%");
		commentaireText.setAlign(Alignment.CENTER);
		commentaireText.setHint("Entrer un commentaire");
		commentaireText.setShowHintInField(true);
		commentaireForm.setFields(commentaireText);
		validationCommentaire = new IButton();
		validationCommentaire.setWidth("40px");
		validationCommentaire.setAlign(Alignment.CENTER);
		validationCommentaire.setTitle("Ok");

		commentaireLayout.addMember(commentaireForm);
		commentaireLayout.addMember(validationCommentaire);
		commentaireLayout.setShowEdges(true);
		this.addMember(commentaireLayout);

	}

	public class TitreHLayout extends HLayout {
		private final String titreTailleNormal = "<center><table width=\"100%\"><tr valign=\"middle\"><td width=\"100%\" align=\"center\" height=\"100%\"><font size=\"4\">Information général</font></td></tr></table></center>";
		private Boolean estEtendu;
		private final int hauteurOriginialDuTitre = 50;
		private final int hauteurFinalDuTitre = 150;

		public TitreHLayout() {
			setMembersMargin(10);
			setWidth100();
			setHeight("32px");
			setAlign(Alignment.CENTER);
			animationTitreFlow = new HTMLFlow();
			animationTitreFlow.setID("titreInformationGeneral");
			animationTitreFlow.setContents(titreTailleNormal);
			animationTitreFlow.setStyleName("exampleTextBlock");
			animationTitreFlow.setOverflow(Overflow.HIDDEN);
			animationTitreFlow.setShowEdges(true);
			animationTitreFlow.setPadding(5);
			animationTitreFlow.setWidth100();
			animationTitreFlow.setHeight(hauteurOriginialDuTitre);
			animationTitreFlow.setTop(50);
			animationTitreFlow.setAnimateTime(800); // in milliseconds

			estEtendu = false;

			addMember(animationTitreFlow);
		}
	}

	public TextItem getCommentaireText() {
		return commentaireText;
	}

	public void setCommentaireText(String commentaireText) {
		this.commentaireText.setValue(commentaireText);
	}

	public void setNomProjetText(String nomProjet) {
		this.nomProjetText.setValue(nomProjet);
	}

	public void setCoutGlobalText(String coutGlobal) {
		this.coutGlobal.setContents(coutGlobal);
	}

	public HasClickHandlers getValidationNomProjet() {
		return validationNomProjet;
	}

	public HasClickHandlers getValidationCommentaire() {
		return validationCommentaire;
	}

	public HasClickHandlers getAnimationTitreFlow() {
		return animationTitreFlow;
	}

	public DynamicForm getCommentaireForm() {
		return commentaireForm;
	}

	public DynamicForm getNomProjetForm() {
		return nomProjetForm;
	}

	public Label getDateDepart() {
		return dateDepart;
	}

	public void setDateDepart(String dateDepart) {
		this.dateDepart.setContents(dateDepart);
	}

	public Label getDateArrive() {
		return dateArrive;
	}

	public void setDateArrive(String dateArrive) {
		this.dateArrive.setContents(dateArrive);
	}

	public Calendar getCalendar() {
		return calendar;
	}

	public DataSource getEventDS() {
		return eventDS;
	}

	public void setEventDS(DataSource eventDS) {
		this.eventDS = eventDS;
	}
	
	
}
